#include <iostream>
#define MaxSize 50
using namespace std;

typedef int ElemType;
typedef struct{
    ElemType data[MaxSize];
    int top;
}SqStack;

void InitStack(SqStack &S){
    S.top = -1;
}

bool StackEmpty(SqStack S){
    if(S.top == -1){
        return true;
    }
    else{
        return false;
    }
}

bool Push(SqStack &S, ElemType x){
    if(S.top == MaxSize - 1){
        return false;
    }
    else{
        S.top++;
        S.data[S.top] = x;
        return true;
    }
}

bool Pop(SqStack &S, ElemType &x){
    if(S.top == -1){
        return false;
    }
    else{
        x = S.data[S.top];
        S.top--;
        return true;
    }
}

bool GetTop(SqStack S, ElemType &x){
    if(S.top == -1){
        return false;
    }
    else{
        x = S.data[S.top];
        return true;
    }
}

int main(){
    SqStack S;
    InitStack(S);
    Push(S, 1);
    Push(S, 2);
    Push(S, 3);
    int x;
    Pop(S, x);
    cout << x << endl;
    GetTop(S, x);
    cout << x << endl;
    return 0;
}